package com.aliwo.exercise;



import java.lang.reflect.Constructor;
import java.lang.reflect.Method;

/**
 * @author xuyayuan
 * @data 2021年06月10日
 * 练习题
 * 一：利用Class类的forName方法得到File类的class对象
 * 二：在控制台打印File类的所有构造器
 * 三：通过newInstance()方法创建File对象，并创建:并创建E:\\mynew.txt文件
 * 提示：
 *  创建文件的正常写法：
 *      File file = new File("E:\\mynew.txt"); // 在内存中，还没有真正的创建
 *      file.createNewFile(); 才能真正的创建文件
 */
public class ReflectFile {
    public static void main(String[] args) throws Exception {
        // 获取Class对象 利用Class类的forName方法得到File类的class对象
        Class cls = Class.forName("java.io.File");
        // 在控制台打印File类的所有构造器
        Constructor[] constructors = cls.getDeclaredConstructors();
        for (Constructor constructor : constructors) {
            System.out.println("File类的所有构造器 : " + constructor);
        }
        // 获取对象实例 通过newInstance()方法创建File对象，并创建:并创建E:\\mynew.txt文件
        Constructor constructor = cls.getDeclaredConstructor(String.class);
        Object file = constructor.newInstance("E:\\mynew.txt"); // 在内存中，还没有真正的创建
        // 得到 createNewFile的方法对象
        Method m = cls.getMethod("createNewFile");
        m.invoke(file);
        Runtime runtime = Runtime.getRuntime();
        int cpuNumber = runtime.availableProcessors();
        System.out.println("cpuNumber : " + cpuNumber);

    }
}
